<%@ page import="com.example.util.DBUtil" %>
<%@ page import="com.example.dao.PasswordResetDao" %>
<%@ page import="java.util.UUID" %>
<%@ page import="java.sql.Timestamp" %>
<%@ page import="java.time.LocalDateTime" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    String email = request.getParameter("email");
    
    // 检查邮箱是否为空
    if (email == null || email.trim().isEmpty()) {
        response.sendRedirect("forgot_password.jsp?error=请输入邮箱地址");
        return;
    }
    
    try {
        PasswordResetDao passwordResetDao = new PasswordResetDao();
        
        // 查找用户ID
        int userId = passwordResetDao.findUserIdByEmail(email);
        if (userId == -1) {
            // 为了安全起见，即使邮箱不存在也显示成功消息
            response.sendRedirect("forgot_password.jsp?success=如果该邮箱存在，密码重置链接已发送到您的邮箱");
            return;
        }
        
        // 删除该用户之前的所有重置令牌
        passwordResetDao.deleteTokensForUser(userId);
        
        // 生成重置令牌
        String token = UUID.randomUUID().toString();
        
        // 设置令牌过期时间为1小时后
        LocalDateTime expiryDateTime = LocalDateTime.now().plusHours(1);
        Timestamp expiryTimestamp = Timestamp.valueOf(expiryDateTime);
        
        // 保存重置令牌到数据库
        passwordResetDao.createResetToken(userId, token, expiryTimestamp);
        
        // 在实际应用中，这里应该发送邮件给用户
        // 由于这是一个演示项目，我们将链接显示在页面上
        String resetLink = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 
                + request.getContextPath() + "/auth/reset_password.jsp?token=" + token;
        
        // 重定向到成功页面，并显示重置链接（实际项目中应该通过邮件发送）
        response.sendRedirect("forgot_password.jsp?success=密码重置链接已生成，请点击下面的链接重置密码（实际项目中会通过邮件发送）&resetLink=" + resetLink);
        
    } catch (Exception e) {
        response.sendRedirect("forgot_password.jsp?error=系统错误: " + e.getMessage());
    }
%>